#pragma once
#include "logger_api.hpp"
#include "core/logger_config.hpp"
#include <memory>

class LoggerFactory {
public:
    // 根据配置创建一个全新的、独立的日志记录器实例
    static std::shared_ptr<ILogger> create(const LoggerConfig& config);

    // 从文件创建
    static std::shared_ptr<ILogger> createFromConfigFile(const std::string& config_file);

    // 获取默认的、全局共享的日志记录器实例（类似单例一样遍历）
    static std::shared_ptr<ILogger> getShared();

    // 允许用户使用自定义配置来初始化/替换默认的共享实例
    static void initShared(const LoggerConfig& config);
    static void initSharedFromConfigFile(const std::string& config_file);

private:
    // 创建格式化器
    static std::shared_ptr<IFormatter> createFormatter(const FormatterConfig& config);

    // 创建并配置Sinks
    static std::vector<std::shared_ptr<ISink>> createSinks(const LoggerConfig& config);
};
